iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0

var 和 let

相信從前幾天的範例中,大家應該知道怎麼宣告變數了,在 JavaScript 中,他的宣告是很特別的,它宣告的範圍是屬於函式範圍(function scoped). 這個是跟其他程式語言有著非常大的不同,直接來看個例子吧。

var foo = 9527;
if (true) {
    var foo = 5487;
}

console.log(foo); // 這裡的結果會是 5487

所以如果這樣寫,肯定會出包:

var index = 0;
var array = [1, 2, 3];

for(var index = 0; index < array.length; index++>) {
    console.log(array[index]);
}

又比如說下面這段程式碼
一般我們可能會覺的他的結果應該是 0 1 2 3 4 5 6 7 8 9, 但由於 setTimeout 會在 for 迴圈執行後才執行, 所以他的結果就會變成 10 10 10 10 10 10 10 10 10 10

for(var i = 0; i < 10; i++) {
    setTimeout(function(){ console.log(i), 100*i});
}

所以,這也是為什麼在 TypeScript (還有 ES6) 出現了一個新的宣告方式 let 了。

let foo = 9527;
if (true) {
    let foo = 5487;
}

console.log(foo); // 這裡的結果會是 9527 (謝謝你讓我感到很安全XD)

下面的結果也會回歸正常 0 1 2 3 4 5 6 7 8 9

for(let i = 0; i < 10; i++) {
    setTimeout(function(){ console.log(i), 100*i});
}

此外,由於 TypeScript 是 JavaScript 的超集,所以如果在 TypeScript 裡面寫 JavaScript 完全是合法的。所以這一點可能就真的要留意一下!

只要 let 不要 var, 他可以幫助我們避開很多容易忽略調的小細節和錯誤!

const

const 和 let 最大的差別就是 const 宣告的變數都是常數,也就是一旦宣告就不能再改變的。如果重複宣告,就會在編譯的時候報錯。


上一篇
第04天-物件型別
下一篇
第06天-函式
系列文
從零開始進入 JavaScript & TypeScript 的世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言